package br.com.pfc.application.dao;

import br.com.pfc.model.Equipamento;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.TransactionPropagationType;
import org.jboss.seam.annotations.Transactional;

/**
 *
 * @author mucceli
 */
@AutoCreate
@Name("equipamentoDAO")
@Transactional(TransactionPropagationType.SUPPORTS)
public class EquipamentoDAO {

    @In
    private Session pfc;

    public List<Equipamento> obterTodos() {
        Criteria c = pfc.createCriteria(Equipamento.class);
        return c.list();
    }

    /**
     * Efetua FLUSH
     * @throws Exception
     */
    public void cancelar() throws Exception {

        try {
            pfc.clear();
            pfc.flush();
        } catch (HibernateException he) {
            throw new Exception(he);
        }
    }

    public List<Equipamento> pesquisarPorTipo(String tipoEquipamento) {
        Criteria c = pfc.createCriteria(Equipamento.class);
        c.add(Restrictions.eq("tipo", tipoEquipamento));
        return c.list();
    }
    public List<Equipamento> pesquisarPorLocal(String localEquipamento) {
        Criteria c = pfc.createCriteria(Equipamento.class);
        c.add(Restrictions.eq("local.idLocal", localEquipamento));
        return c.list();
    }
    public List<Equipamento> pesquisarPorModelo(String modeloEquipamento) {
        Criteria c = pfc.createCriteria(Equipamento.class);
        c.add(Restrictions.eq("modelo", modeloEquipamento));
        return c.list();
    }

    public List<Equipamento> pesquisar() {
        Criteria c = pfc.createCriteria(Equipamento.class);
        return c.list();
    }

    public void alterar(Equipamento equipamento) {
        pfc.update(equipamento);
    }

    public void salvar(Equipamento equipamento) {
        pfc.save(equipamento);
        pfc.flush();
    }

    public void excluir(Equipamento equipamento) {
        pfc.delete(equipamento);
        pfc.flush();
    }

    public Equipamento obterPorId(Integer idEquipamento) {
        Criteria c = pfc.createCriteria(Equipamento.class);
        c.add(Restrictions.eq("idEquipamento", idEquipamento));
        return (Equipamento) c.uniqueResult();
    }
}
